/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sys.screen;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.swing.SwingConstants;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import sys.bean.ClienteBean;
import sys.bean.MovimentacaoBean;
import sys.bean.UsuarioBean;
import sys.bean.ValeMercadoriaBean;
import sys.dao.ClienteDao;
import sys.dao.MovimentacaoDao;
import sys.dao.UsuarioDao;
import sys.dao.ValeMercadoriaDao;
import sys.utils.LetterUpper;
import sys.utils.Mensagens;
import sys.utils.PrinterOptions;
import sys.utils.Utils;
import static sys.utils.Utils.codCorreto;
import static sys.utils.Utils.escClose;
import static sys.utils.Utils.numParaCalculos;

/**
 *
 * @author Administrador
 */
public class UIVale extends javax.swing.JDialog {

    ClienteBean cliente;
    ValeMercadoriaBean valeMercadora;
    private List<UsuarioBean> listaVendedores;
    SimpleDateFormat formDataSpac = new SimpleDateFormat("yyyyMMdd");
    NumberFormat formatoMoeda = NumberFormat.getCurrencyInstance();
    String idVendedor;
    String idCliente;
    PrintService ps[];
    PrintService impressora;

    /**
     * Creates new form UIAnalisaValeMercadoria
     *
     * @param parent
     * @param modal
     */
    public UIVale(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        UIManager.put("Table.alternateRowColor", new java.awt.Color(230, 255, 255));
        escClose(this);
        setLocationRelativeTo(null);
        dataInicial.setDate(new Date());
        dataFinal.setDate(new Date());
        parametrosIniciais();
        listaImpressoras();
        Utils.maximizarDialog(this);
    }

    public UIVale(java.awt.Frame parent, boolean modal, Date dtInicial, Date dtFinal, int posVendedor) {
        super(parent, modal);
        initComponents();
        UIManager.put("Table.alternateRowColor", new java.awt.Color(230, 255, 255));
        escClose(this);
        setLocationRelativeTo(null);
        listaImpressoras();
        dataInicial.setDate(dtInicial);
        dataFinal.setDate(dtFinal);
        atualizaVendedores();
        cbVendedor.setSelectedIndex(posVendedor + 1);
        atualizarVales();
        Utils.maximizarDialog(this);
    }

    private void listaImpressoras() {
        try {
            cbImpressora.removeAllItems();
            DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            ps = PrintServiceLookup.lookupPrintServices(df, null);

            for (PrintService p : ps) {
                cbImpressora.addItem(p.getName());
            }
        } catch (Exception e) {
            Mensagens.msgErro("Erro Ao Encontrar Impressoras\n" + e.getMessage());
        }
    }

    private void imprimirBematech(String b) {

        for (int i = 0; i < 1; i++) {
            // Conteúdo a ser impresso '\u039A' utilizado para cortar o papel
            InputStream stream = new ByteArrayInputStream((b + "\u039A").getBytes());

            impressora = ps[cbImpressora.getSelectedIndex()];

            DocPrintJob dpj = impressora.createPrintJob();

            // Definição de atributos do conteúdo a ser impresso:  
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            // Cria um Doc para impressão a partir do arquivo exemplo.txt 
            Doc documentoTexto = new SimpleDoc(stream, flavor, null);

            try {
                //  Imprime o documento sem exibir uma tela de dialogo 
                dpj.print(documentoTexto, null);
            } catch (PrintException ex) {
                Mensagens.msgErro("erro ao imprimir, certifique-se de que a impressora foi selecionada corretamente!\n" + ex);
            }
        }
    }

    private void imprimirDaruma(String b) {

        for (int i = 0; i < 1; i++) {
            // Conteúdo a ser impresso '\u039A' utilizado para cortar o papel
            String impressao = b.replace("a1", "").replace("a0", "").replace("a2", "").replace("m", "").replace("@", "");
            InputStream stream = new ByteArrayInputStream(impressao.getBytes());

            impressora = ps[cbImpressora.getSelectedIndex()];

            DocPrintJob dpj = impressora.createPrintJob();

            // Definição de atributos do conteúdo a ser impresso:  
            DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

            //Cria um Doc para impressão a partir do arquivo exemplo.txt 
            Doc documentoTexto = new SimpleDoc(stream, flavor, null);

            try {
                //Imprime o documento sem exibir uma tela de dialogo 
                dpj.print(documentoTexto, null);
            } catch (PrintException ex) {
                Mensagens.msgErro("erro ao imprimir, certifique-se de que a impressora foi selecionada corretamente!\n" + ex);
            }
        }
    }

    /*
     IMPRIMINDO
     */
    private void gerarImpressaoBematech() {

        String nPedido = tabela.getValueAt(tabela.getSelectedRow(), 0).toString();
        String pedidoGeradoDevolucao = "";

        try {
            valeMercadora = ValeMercadoriaDao.DadosVale(nPedido, dataTransacaoCaixa());
            pedidoGeradoDevolucao = valeMercadora.getPedidoGeradoDevolucao();
        } catch (SQLException | IOException ex) {
            Mensagens.msgErro("erro ao recuperar dados do vale mercadoria\n" + ex.getMessage());
        }

        PrinterOptions p = new PrinterOptions();

        p.resetAll();
        p.initialize();

        p.newLine();
        p.alignCenter();
        p.setText("VOVO JOAO MAT. PARA CONSTRUCAO");
        p.newLine();
        p.alignCenter();
        p.setText("(43) 3546-1111 / (43) 3546-2394");
        p.newLine();
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        p.alignLeft();
        p.setText(" DATA:" + valeMercadora.getDataEmissao());
        p.setText(" HORA:" + valeMercadora.getCaixa().getHora());
        p.setText(" TERM.:" + valeMercadora.getCaixa().getTerminal());
        p.newLine();

        p.alignCenter();
        p.addLineSeperator();
        p.newLine();

        p.setText("**** VALE MERCADORIA ****");
        p.newLine();

        p.addLineSeperator();
        p.newLine();
        p.alignLeft();
        p.setText("  VALE: " + valeMercadora.getnVale() + "  ");
        p.setText("TRANSACAO: " + valeMercadora.getnTransacao() + "  ");
        p.setText("PEDIDO: " + valeMercadora.getPedidoOrigem());
        p.newLine();
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        p.alignLeft();
        p.setText("  CLIENTE: " + valeMercadora.getCliente().getCodigo() + "-" + valeMercadora.getCliente().getNome());
        p.newLine();
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        p.alignRight();
        p.doubleHeight(true);
        p.setText("  TOTAL DO VALE: " + formatoMoeda.format(valeMercadora.getvVale()));
        p.newLine();
        p.doubleHeight(false);
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        p.alignCenter();
        p.setText("RELACAO DE PRODUTOS DEVOLVIDOS");
        p.newLine();
        p.addLineSeperator();
        p.newLine();
        p.alignLeft();
        p.setText("  QTD.     ");
        p.alignCenter();
        p.setText(" UNT.        ");
        p.alignRight();

        p.setText("  TOTAL");
        p.newLine();
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        try {
            for (MovimentacaoBean mov : MovimentacaoDao.produtosValeMercadoria(pedidoGeradoDevolucao)) {
                p.alignLeft();
                p.setText("  " + mov.getProduto().getDescricao());
                p.newLine();
                p.alignLeft();
                p.setText(" " + formatoMoeda.format(mov.getQuantidade()).replace("R$", "") + " ");
                p.alignCenter();
                p.setText("     " + formatoMoeda.format(mov.getValor()) + " ");
                p.alignRight();
                p.setText("     " + formatoMoeda.format(mov.getQuantidade() * mov.getValor()) + "   ");
                p.newLine();
            }
        } catch (SQLException | IOException ex) {
            Mensagens.msgErro("erro ao recuperar produtos do vale mercadoria\n" + ex.getMessage());
        }
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        p.alignLeft();
        p.setText("  VENDEDOR: " + valeMercadora.getUsuario().getCodigo() + "-" + valeMercadora.getUsuario().getNome());
        p.newLine();
        p.alignCenter();
        p.addLineSeperator();
        p.newLine();
        p.newLine();
        p.newLine();
        p.newLine();
        p.setText("" + (char) 27 + (char) 109);

        String impressao = p.setText("");
        imprimirBematech(impressao);
    }

    private void gerarImpressaoDaruma() {

        String nPedido = tabela.getValueAt(tabela.getSelectedRow(), 0).toString();
        String pedidoGeradoDevolucao = "";

        try {
            valeMercadora = ValeMercadoriaDao.DadosVale(nPedido, dataTransacaoCaixa());
            pedidoGeradoDevolucao = valeMercadora.getPedidoGeradoDevolucao();
        } catch (SQLException | IOException ex) {
            Mensagens.msgErro("erro ao recuperar dados do vale mercadoria\n" + ex.getMessage());
        }

        String impressao = "";
        impressao += "          VOVO JOAO MAT. PARA CONSTRUCAO" + "\n";
        impressao += "          (43) 3546-1111 / (43) 3546-2394" + "\n";
        impressao += "  ----------------------------------------------" + "\n";
        impressao += "  DATA: " + valeMercadora.getDataEmissao() + " HORA: " + valeMercadora.getCaixa().getHora() + " TER.:" + valeMercadora.getCaixa().getTerminal() + "\n";
        impressao += "  ----------------------------------------------" + "\n";
        impressao += "            **** VALE MERCADORIA ****" + "\n";
        impressao += "  ----------------------------------------------" + "\n";
        impressao += "  VALE: " + valeMercadora.getnVale() + "  TRANSACAO: " + valeMercadora.getnTransacao() + "  PEDIDO: " + valeMercadora.getPedidoOrigem() + "\n";
        impressao += "  ----------------------------------------------" + "\n";
        impressao += "  CLIENTE: " + valeMercadora.getCliente().getCodigo() + "-" + valeMercadora.getCliente().getNome() + "\n";
        impressao += "  ----------------------------------------------" + "\n\n";
        impressao += "  TOTAL DO VALE: " + formatoMoeda.format(valeMercadora.getvVale()) + "\n\n";
        impressao += "  ----------------------------------------------" + "\n";
        impressao += "          RELACAO DE PRODUTOS DEVOLVIDOS" + "\n";
        impressao += "  ----------------------------------------------" + "\n";
        impressao += "  QTD.      UNT.         TOTAL" + "\n";
        impressao += "  ----------------------------------------------" + "\n";

        try {
            for (MovimentacaoBean mov : MovimentacaoDao.produtosValeMercadoria(pedidoGeradoDevolucao)) {
                impressao += "  " + mov.getProduto().getDescricao() + "\n";
                impressao += " " + formatoMoeda.format(mov.getQuantidade()).replace("R$", "") + "   ";
                impressao += "  " + formatoMoeda.format(mov.getValor()) + "   ";
                impressao += "  " + formatoMoeda.format(mov.getValor() * mov.getQuantidade()) + "   \n";
            }
        } catch (SQLException | IOException ex) {
            Mensagens.msgErro("erro ao recuperar produtos do vale mercadoria\n" + ex.getMessage());
        }

        impressao += "  ----------------------------------------------" + "\n";
        impressao += "  VENDEDOR: " + valeMercadora.getUsuario().getCodigo() + "-" + valeMercadora.getUsuario().getNome() + "\n";
        impressao += "  ----------------------------------------------" + "\n\n\n\n\n\n\n\n\n\n";

        imprimirDaruma(impressao);

    }
    /*
     abre tela de clientes para pesquisa
     */

    private void loadSearch() {
        UIPesquisaCliente uipc = new UIPesquisaCliente(this, true);
        uipc.setVisible(true);
    }

    public void preencheCampos() {
        try {
            cliente = ClienteDao.consultaCliente(codCorreto(txCodCliente.getText(), 5));
            txCodCliente.setText(cliente.getCodigo());
            txCliente.setText(cliente.getNome());
        } catch (SQLException | IOException ex) {
            Mensagens.msgErro("erro ao carregar dados do cliente\n" + ex.getMessage());
        }
    }

    private void somaTabela() {
        double soma = 0;
        int[] linhas = tabela.getSelectedRows();
        for (int i = 0; i < linhas.length; i++) {
            soma += Double.parseDouble(numParaCalculos(tabela.getValueAt(linhas[i], 5).toString()));
        }
        lbSoma.setText("SOMA " + formatoMoeda.format(soma));
    }

    private void parametrosIniciais() {
        final BarraProgresso pb = new BarraProgresso(this);
        SwingWorker worker = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {
                pb.gerarJanela();
                pb.lbDescricao.setText("ATUALIZANDO VENDEDORES, AGUARDE...");
                atualizaVendedores();
                return null;
            }

            @Override
            protected void done() {
                pb.fechar();
            }
        };
        worker.execute();
    }

    private void atualizaVendedores() {
        try {
            cbVendedor.removeAllItems();
            cbVendedor.addItem("<< TODOS OS VENDEDORES >>");
            listaVendedores = UsuarioDao.getListaComboVendedores();

            for (UsuarioBean usu : listaVendedores) {
                cbVendedor.addItem(usu.getCodigo() + " - " + usu.getNome());
            }
        } catch (IOException | SQLException ex) {
            Mensagens.msgErro("erro\n" + ex.getMessage());
        }
    }

    public void atualizaTabela() {

        DefaultTableModel modelo = (DefaultTableModel) tabela.getModel();
        modelo.setNumRows(0);

        idVendedor = "";
        idCliente = "";

        if (cbVendedor.getSelectedIndex() != 0) {
            idVendedor = listaVendedores.get(cbVendedor.getSelectedIndex() - 1).getCodigo();
        }

        if (!txCodCliente.getText().equals("")) {
            idCliente = txCodCliente.getText();
        }

        try {
            for (ValeMercadoriaBean vale : ValeMercadoriaDao.listaVales(formDataSpac.format(dataInicial.getDate()),
                    formDataSpac.format(dataFinal.getDate()), idVendedor, idCliente, codCorreto(txCodigoVM.getText(), 5))) {
                modelo.addRow(new Object[]{
                    vale.getnVale(), vale.getDataEmissao(), vale.getPedido().getUsuario().getNome(), vale.getPedido().getCliente().getCodigo(), vale.getPedido().getCliente().getNome(),
                    formatoMoeda.format(vale.getvVale()).replace("R$", ""), formatoMoeda.format(vale.getvBaixa()).replace("R$", ""), vale.getDataBaixa(), vale.getPedidoOrigem(), vale.getnTransacao()
                });
            }

            DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();

            centralizado.setHorizontalAlignment(SwingConstants.CENTER);

            tabela.getColumnModel().getColumn(0).setCellRenderer(centralizado);
            tabela.getColumnModel().getColumn(1).setCellRenderer(centralizado);
            tabela.getColumnModel().getColumn(3).setCellRenderer(centralizado);
            tabela.getColumnModel().getColumn(5).setCellRenderer(centralizado);
            tabela.getColumnModel().getColumn(6).setCellRenderer(centralizado);
            tabela.getColumnModel().getColumn(7).setCellRenderer(centralizado);
            tabela.getColumnModel().getColumn(8).setCellRenderer(centralizado);

        } catch (SQLException | IOException ex) {
            Mensagens.msgErro("erro\n" + ex.getMessage());
        }

    }

    /*
     data com o formato para tabela de transação do caixa
     */
    public String dataTransacaoCaixa() {

        String data = tabela.getValueAt(tabela.getSelectedRow(), 1).toString();
        String dia = data.substring(0, data.length() - 8);
        String mes = data.substring(3, data.length() - 5);
        String ano = data.substring(8);

        return ano + mes + dia;
    }

    /*
     data com o formato para tabela de transação do caixa utilizado para carregar dados do vale
     */
    public String dataTransacaoCaixaVale() {

        String data = tabela.getValueAt(tabela.getSelectedRow(), 1).toString();
        String dia = data.substring(0, data.length() - 8);
        String mes = data.substring(3, data.length() - 5);
        String ano = data.substring(6);

        return ano + mes + dia;
    }

    /*
     quando é vale avulso, usa esse metodo para visualizar os produtos
     */
    private void atualizaDetalhesVale() {

        UIValeDetalhes vDetalhes = new UIValeDetalhes(this, true);
        vDetalhes.txVale.setText(tabela.getValueAt(tabela.getSelectedRow(), 0).toString());
        vDetalhes.txData.setText(tabela.getValueAt(tabela.getSelectedRow(), 1).toString());
        vDetalhes.txVendedor.setText(tabela.getValueAt(tabela.getSelectedRow(), 2).toString());
        vDetalhes.txCliente.setText(tabela.getValueAt(tabela.getSelectedRow(), 3).toString() + "-" + tabela.getValueAt(tabela.getSelectedRow(), 4).toString());
        vDetalhes.atualizaTabela(dataTransacaoCaixaVale(), tabela.getValueAt(tabela.getSelectedRow(), 3).toString());

        vDetalhes.setVisible(true);

    }

    /*
     quando vale tem pedido usa esse metodo para visualizar os produtos
     */
    private void atualizaDetalhesValePedido() {
        UIValeDetalhes vDetalhes = new UIValeDetalhes(this, true);

        vDetalhes.txVale.setText(tabela.getValueAt(tabela.getSelectedRow(), 0).toString());
        vDetalhes.txData.setText(tabela.getValueAt(tabela.getSelectedRow(), 1).toString());
        vDetalhes.txVendedor.setText(tabela.getValueAt(tabela.getSelectedRow(), 2).toString());
        vDetalhes.txCliente.setText(tabela.getValueAt(tabela.getSelectedRow(), 3).toString() + "-" + tabela.getValueAt(tabela.getSelectedRow(), 4).toString());
        vDetalhes.atualizaTabelaPedido(tabela.getValueAt(tabela.getSelectedRow(), 8).toString(), dataTransacaoCaixaVale());

        vDetalhes.setVisible(true);
    }

    private void detalhesVale() {

        if (tabela.getValueAt(tabela.getSelectedRow(), 8).toString().equals("'VALE AVULSO'")) {
            atualizaDetalhesVale();
        } else if (tabela.getValueAt(tabela.getSelectedRow(), 8).toString().contains("(")) {
            Mensagens.msgAtencao("não é possível carregar os produtos! \nvale gerado após o recebimento de outro vale.");
        } else {
            atualizaDetalhesValePedido();
        }

    }

    public final void atualizarVales() {
        final BarraProgresso pb = new BarraProgresso(this);
        SwingWorker worker = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {
                pb.gerarJanela();
                pb.lbDescricao.setText("ANALISANDO, POR FAVOR AGUARDE...");
                atualizaTabela();
                return null;
            }

            @Override
            protected void done() {
                pb.fechar();
            }
        };
        worker.execute();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jpDados = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        cbVendedor = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        dataInicial = new com.toedter.calendar.JDateChooser("dd/MM/yyyy", "##/##/#####", '_');
        jLabel6 = new javax.swing.JLabel();
        dataFinal = new com.toedter.calendar.JDateChooser("dd/MM/yyyy", "##/##/#####", '_');
        txCodCliente = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        txCliente = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        lbSoma = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        txCodigoVM = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        cbImpressora = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabela = new javax.swing.JTable();
        jPanel4 = new javax.swing.JPanel();
        btnGerar = new javax.swing.JButton();
        btnAjustar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("VALES EMITIDOS");

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));

        jpDados.setBackground(new java.awt.Color(255, 255, 255));
        jpDados.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "SELECIONE DADOS:", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Calibri", 0, 10))); // NOI18N

        jLabel5.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel5.setText("VENDEDOR:");

        cbVendedor.setFont(new java.awt.Font("Calibri", 0, 12)); // NOI18N
        cbVendedor.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "<< TODOS OS VENDEDORES >>" }));

        jLabel2.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel2.setText("DATA INICIAL:");

        dataInicial.setFont(new java.awt.Font("Calibri", 0, 12)); // NOI18N

        jLabel6.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel6.setText("DATA FINAL:");

        dataFinal.setFont(new java.awt.Font("Calibri", 0, 12)); // NOI18N

        txCliente.setDocument(new LetterUpper());
        txCodCliente.setBackground(new java.awt.Color(245, 245, 245));
        txCodCliente.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        txCodCliente.setForeground(new java.awt.Color(51, 51, 255));
        txCodCliente.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txCodCliente.setBorder(null);
        txCodCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txCodClienteActionPerformed(evt);
            }
        });
        txCodCliente.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txCodClienteKeyReleased(evt);
            }
        });

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sys/picture/find-2.png"))); // NOI18N
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        txCliente.setDocument(new LetterUpper());
        txCliente.setEditable(false);
        txCliente.setBackground(new java.awt.Color(245, 245, 245));
        txCliente.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        txCliente.setForeground(new java.awt.Color(51, 51, 255));
        txCliente.setBorder(null);
        txCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txClienteActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel1.setText("NOME:");

        lbSoma.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        lbSoma.setForeground(new java.awt.Color(204, 0, 204));
        lbSoma.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);

        jLabel3.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel3.setText("CÓDIGO:");

        jLabel4.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel4.setText("VALE MERCADORIA:");

        txCliente.setDocument(new LetterUpper());
        txCodigoVM.setBackground(new java.awt.Color(245, 245, 245));
        txCodigoVM.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        txCodigoVM.setForeground(new java.awt.Color(51, 51, 255));
        txCodigoVM.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txCodigoVM.setBorder(null);
        txCodigoVM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txCodigoVMActionPerformed(evt);
            }
        });
        txCodigoVM.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txCodigoVMKeyReleased(evt);
            }
        });

        jLabel7.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel7.setText("SELECIONE IMPRESSORA:");

        cbImpressora.setFont(new java.awt.Font("Calibri", 0, 12)); // NOI18N
        cbImpressora.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "<< SELECIONE IMPRESSORA >>" }));

        javax.swing.GroupLayout jpDadosLayout = new javax.swing.GroupLayout(jpDados);
        jpDados.setLayout(jpDadosLayout);
        jpDadosLayout.setHorizontalGroup(
            jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpDadosLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jpDadosLayout.createSequentialGroup()
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(dataInicial, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel5)
                            .addComponent(cbVendedor, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel7)
                            .addComponent(cbImpressora, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel4)
                            .addGroup(jpDadosLayout.createSequentialGroup()
                                .addComponent(txCodigoVM, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(lbSoma, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(jpDadosLayout.createSequentialGroup()
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel6)
                            .addComponent(dataFinal, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txCodCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel3))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(txCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 440, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(269, 269, 269)))
                .addContainerGap(10, Short.MAX_VALUE))
        );
        jpDadosLayout.setVerticalGroup(
            jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpDadosLayout.createSequentialGroup()
                .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jpDadosLayout.createSequentialGroup()
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(jpDadosLayout.createSequentialGroup()
                                .addComponent(jLabel7)
                                .addGap(1, 1, 1)
                                .addComponent(cbImpressora))
                            .addGroup(jpDadosLayout.createSequentialGroup()
                                .addGap(0, 0, Short.MAX_VALUE)
                                .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addGroup(jpDadosLayout.createSequentialGroup()
                                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jLabel2)
                                            .addComponent(jLabel5))
                                        .addGap(1, 1, 1)
                                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                            .addComponent(cbVendedor)
                                            .addComponent(dataInicial, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                                    .addGroup(jpDadosLayout.createSequentialGroup()
                                        .addComponent(jLabel4)
                                        .addGap(23, 23, 23))
                                    .addComponent(txCodigoVM, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpDadosLayout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(lbSoma, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(7, 7, 7)))
                .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txCliente, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpDadosLayout.createSequentialGroup()
                        .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addGroup(jpDadosLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(jLabel6)
                                .addComponent(jLabel3)))
                        .addGap(1, 1, 1)
                        .addComponent(dataFinal, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(txCodCliente, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        tabela.setAutoCreateRowSorter(true);
        tabela.setFont(new java.awt.Font("Calibri", 0, 12)); // NOI18N
        tabela.setForeground(new java.awt.Color(51, 102, 255));
        tabela.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "VALE", "DATA EMISSÃO", "VENDEDOR", "CODIGO", "CLIENTE", "VALOR", "VR. UTILIZADO", "DATA BAIXA", "ORIGEM", "TRANSAÇÃO"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabela.setGridColor(new java.awt.Color(204, 204, 204));
        tabela.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tabelaMouseClicked(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                tabelaMouseReleased(evt);
            }
        });
        tabela.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tabelaKeyReleased(evt);
            }
        });
        jScrollPane1.setViewportView(tabela);
        if (tabela.getColumnModel().getColumnCount() > 0) {
            tabela.getColumnModel().getColumn(2).setPreferredWidth(100);
            tabela.getColumnModel().getColumn(3).setPreferredWidth(30);
            tabela.getColumnModel().getColumn(4).setPreferredWidth(250);
            tabela.getColumnModel().getColumn(9).setMinWidth(0);
            tabela.getColumnModel().getColumn(9).setPreferredWidth(0);
            tabela.getColumnModel().getColumn(9).setMaxWidth(0);
        }

        jPanel4.setBackground(new java.awt.Color(255, 255, 255));
        jPanel4.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 204, 204)));

        btnGerar.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        btnGerar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sys/picture/find.png"))); // NOI18N
        btnGerar.setText("BUSCAR");
        btnGerar.setPreferredSize(new java.awt.Dimension(120, 30));
        btnGerar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGerarActionPerformed(evt);
            }
        });
        jPanel4.add(btnGerar);

        btnAjustar.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        btnAjustar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sys/picture/edit.png"))); // NOI18N
        btnAjustar.setText("AJUSTAR");
        btnAjustar.setPreferredSize(new java.awt.Dimension(120, 30));
        btnAjustar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAjustarActionPerformed(evt);
            }
        });
        jPanel4.add(btnAjustar);

        btnCancelar.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/sys/picture/print.png"))); // NOI18N
        btnCancelar.setText("IMPRIMIR");
        btnCancelar.setPreferredSize(new java.awt.Dimension(120, 30));
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        jPanel4.add(btnCancelar);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGap(2, 2, 2)
                        .addComponent(jScrollPane1))
                    .addComponent(jpDados, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jpDados, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void txClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txClienteActionPerformed

    }//GEN-LAST:event_txClienteActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        loadSearch();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void txCodClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txCodClienteActionPerformed
        if (txCodCliente.getText().equals("")) {
            loadSearch();
        } else {
            preencheCampos();
        }
    }//GEN-LAST:event_txCodClienteActionPerformed

    private void txCodClienteKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txCodClienteKeyReleased
        if (txCodCliente.getText().equals("")) {
            txCliente.setText("");
        }
    }//GEN-LAST:event_txCodClienteKeyReleased

    private void btnGerarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGerarActionPerformed
        atualizarVales();
    }//GEN-LAST:event_btnGerarActionPerformed

    private void tabelaMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabelaMouseReleased
        somaTabela();
    }//GEN-LAST:event_tabelaMouseReleased

    private void tabelaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tabelaKeyReleased
        somaTabela();
    }//GEN-LAST:event_tabelaKeyReleased

    private void tabelaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tabelaMouseClicked

        if (evt.getClickCount() == 2) {

            final BarraProgresso pb = new BarraProgresso(this);
            SwingWorker worker = new SwingWorker() {

                @Override
                protected Object doInBackground() throws Exception {
                    pb.gerarJanela();
                    pb.lbDescricao.setText("CARREGANDO, POR FAVOR AGUARDE...");
                    detalhesVale();
                    return null;
                }

                @Override
                protected void done() {
                    pb.fechar();
                }
            };
            worker.execute();

        }
    }//GEN-LAST:event_tabelaMouseClicked

    private void txCodigoVMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txCodigoVMActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txCodigoVMActionPerformed

    private void txCodigoVMKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txCodigoVMKeyReleased
        // TODO add your handling code here:
    }//GEN-LAST:event_txCodigoVMKeyReleased

    private void btnAjustarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAjustarActionPerformed
        if (tabela.getSelectedRow() < 0) {
            Mensagens.msgAtencao("selecione pelo menos 1 registro");
            return;
        } else {
            UIAlteraVale aVale = new UIAlteraVale(this, true);
            aVale.carregaDadosVale(tabela.getValueAt(tabela.getSelectedRow(), 0).toString(), dataTransacaoCaixa());
            aVale.setVisible(true);
        }
    }//GEN-LAST:event_btnAjustarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        if (tabela.getValueAt(tabela.getSelectedRow(), 8).toString().contains("(")) {
            Mensagens.msgAtencao("não é possível imprimir! \nvale gerado após o recebimento de outro vale.");
        } else {
            if (cbImpressora.getSelectedItem().toString().contains("BEM")) {
                gerarImpressaoBematech();
            } else {
                gerarImpressaoDaruma();
            }
        }
    }//GEN-LAST:event_btnCancelarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAjustar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnGerar;
    private javax.swing.JComboBox cbImpressora;
    private javax.swing.JComboBox cbVendedor;
    private com.toedter.calendar.JDateChooser dataFinal;
    private com.toedter.calendar.JDateChooser dataInicial;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel jpDados;
    private javax.swing.JLabel lbSoma;
    private javax.swing.JTable tabela;
    private javax.swing.JTextField txCliente;
    public javax.swing.JTextField txCodCliente;
    public javax.swing.JTextField txCodigoVM;
    // End of variables declaration//GEN-END:variables
}
